package com.share.service.impl;

import com.alibaba.fastjson2.JSONObject;
import com.share.common.core.exception.ServiceException;
import com.share.service.IMapService;


import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;

import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;

@Slf4j
@Service
@SuppressWarnings({"unchecked", "rawtypes"})
public class MapServiceImpl implements IMapService {

    @Autowired
    private RestTemplate restTemplate;

    @Value("${tencent.map.key}")
    private String key;

    /**
     * 根据关键词计算纬度和经度
     * 该方法使用腾讯地图的API来解析地址信息
     *
     * @param keyword 地址关键词，用于查询经纬度信息
     * @return 返回包含纬度和经度信息的JSONObject对象
     * @throws ServiceException 当地图解析异常时抛出服务异常
     */
    @Override
    public JSONObject calculateLatLng(String keyword) {
        // 腾讯地图地理编码API的URL模板
        String url = "https://apis.map.qq.com/ws/geocoder/v1/?address={address}&key={key}";

        // 创建一个HashMap来存储URL参数
        Map<String, String> map = new HashMap<>();
        map.put("address", keyword);
        map.put("key", key);

        // 使用RestTemplate发送HTTP请求，并直接将响应解析为JSONObject
        JSONObject response = restTemplate.getForObject(url, JSONObject.class, map);
        // 检查响应状态码是否为0，非0代表解析失败
        if (response.getIntValue("status") != 0) {
            throw new ServiceException("地图解析异常");
        }

        // 返回第一条最佳线路的经纬度信息
        JSONObject result = response.getJSONObject("result");
        System.out.println(result.toJSONString());
        return result.getJSONObject("location");
    }


    /**
     * 根据经纬度计算距离
     *
     * @param startLongitude
     * @param startLatitude
     * @param endLongitude
     * @param endLatitude
     * @return
     */
    @Override
    public Double calculateDistance(String startLongitude, String startLatitude,
                                    String endLongitude, String endLatitude) {
//        String url = "https://apis.map.qq.com/ws/direction/v1/walking/?from={from}&to={to}&key={key}";
//
//        Map<String, String> map = new HashMap<>();
//        map.put("from", startLatitude + "," + startLongitude);
//        map.put("to", endLatitude + "," + endLongitude);
//        map.put("key", key);
//
//        JSONObject result = restTemplate.getForObject(url, JSONObject.class, map);
//        if(result.getIntValue("status") != 0) {
//            String message = result.getString("message");
//            System.out.println(message);
//            throw new ServiceException("地图服务调用失败");
//        }
//
//        //返回第一条最佳线路
//        JSONObject route = result.getJSONObject("result").getJSONArray("routes").getJSONObject(0);
//        // 单位：米
//        return route.getBigDecimal("distance").doubleValue();

        Random random = new Random();
        BigDecimal randomDouble = BigDecimal.valueOf(random.nextDouble(100));

        // 保留两位小数，并进行四舍五入
        BigDecimal roundedValue = randomDouble.setScale(1, RoundingMode.HALF_UP);
        double roundedDoubleValue = roundedValue.doubleValue();
        return roundedDoubleValue;
    }

}